package com.zdkj.admin.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zdkj.admin.api.entity.SysDict;
import com.zdkj.admin.api.entity.SysDictItem;
import com.zdkj.admin.mapper.SysDictItemMapper;
import com.zdkj.admin.service.SysDictItemService;
import com.zdkj.admin.service.SysDictService;
import com.zdkj.common.core.constant.CacheConstants;
import com.zdkj.common.core.constant.enums.DictTypeEnum;
import com.zdkj.common.core.exceltools.ExcelUtil;
import com.zdkj.common.core.exceltools.IExcelParser;
import com.zdkj.common.core.exceltools.MultipartFileToFile;
import com.zdkj.common.core.exceltools.impl.CommonExcelParse;
import com.zdkj.common.core.util.R;
import lombok.AllArgsConstructor;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;

import java.io.File;
import java.util.List;

/**
 * 字典项
 *
 * @author cui_com
 * @date 2019/03/19
 */
@Service
@AllArgsConstructor
public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDictItem> implements SysDictItemService {
    private final SysDictService dictService;

    /**
     * 删除字典项
     *
     * @param id 字典项ID
     * @return
     */
    @Override
    @CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
    public R removeDictItem(Integer id) {
        //根据ID查询字典ID
        SysDictItem dictItem = this.getById(id);
        SysDict dict = dictService.getById(dictItem.getDictId());
        // 系统内置
        if (DictTypeEnum.SYSTEM.getType().equals(dict.getSystem())) {
            return R.failed("系统内置字典项目不能删除");
        }
        return R.ok(this.removeById(id));
    }

    /**
     * 更新字典项
     *
     * @param item 字典项
     * @return
     */
    @Override
    @CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
    public R updateDictItem(SysDictItem item) {
        //查询字典
        SysDict dict = dictService.getById(item.getDictId());
        // 系统内置
        if (DictTypeEnum.SYSTEM.getType().equals(dict.getSystem())) {
            return R.failed("系统内置字典项目不能删除");
        }
        return R.ok(this.updateById(item));
    }

    @Override
    public Boolean saveBatchWithExcel(File excelFile) throws Exception {
        Workbook workbook = ExcelUtil.chooseWorkbook(excelFile);
        Sheet sheet = workbook.getSheetAt(0);
        IExcelParser excelParser = new CommonExcelParse();
        List<SysDictItem> sysItemList = excelParser.parse(sheet, new SysDictItem());
        if (CollectionUtil.isNotEmpty(sysItemList)) {
            //刪除緩存文件
            MultipartFileToFile.delteTempFile(excelFile);
            return this.saveBatch(sysItemList);
        }
        return false;
    }
}
